/**
 * 分页响应模型 - 系统分页查询的统一响应格式定义
 *
 * 开发人员：邢珈晟
 * 开发时间：2025-10-20 至 2025-10-25
 * 模块职责：定义系统分页查询的响应格式，支持分页信息和数据内容的封装
 *
 * 技术要点：
 * - 泛型分页数据支持灵活的数据类型
 * - Spring Data Page对象转换方法
 * - 分页元信息封装（总数、页数、当前页等）
 * - Lombok简化代码编写
 * - 前后端约定的分页格式标准
 *
 * 开发故事：负责分页响应模型的设计和实现，与数据访问层深度配合，为前端提供统一的分页数据展示格式。
 */
package com.pbl.common.model;

import lombok.Data;
import org.springframework.data.domain.Page;

import java.util.List;

@Data
public class PageResponse<T> {
    private long totalElements;
    private int totalPages;
    private int page;
    private int size;
    private List<T> content;

    /**
     * 从Spring Data Page对象构造分页响应
     * @param page Spring Data分页对象
     * @return 分页响应对象
     */
    public static <T> PageResponse<T> from(Page<T> page) {
        PageResponse<T> r = new PageResponse<>();
        r.totalElements = page.getTotalElements();
        r.totalPages = page.getTotalPages();
        r.page = page.getNumber();
        r.size = page.getSize();
        r.content = page.getContent();
        return r;
    }
}
